package com.aracky.flowable.service;

import com.aracky.common.vo.PageVO;
import com.aracky.flowable.model.dto.AcceptOrRejectDTO;
import com.aracky.flowable.model.dto.StartFlowableDTO;
import com.aracky.flowable.model.request.DoneRequest;
import com.aracky.flowable.model.request.TodoRequest;
import com.aracky.flowable.model.vo.DoneTaskVO;
import com.aracky.flowable.model.vo.TodoTaskVO;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.task.api.Task;

import java.util.List;

public interface FlowTaskService {


    /**
     * 启动流程
     * @param dto  启动流程参数
     * @return
     */
    String startFlowable(StartFlowableDTO dto);

    /**
     * 批量启动流程
     * @param dtoList
     * @return
     */
    void batchStartFlowable(List<StartFlowableDTO> dtoList);

    /**
     * 用户待办
     *
     * @param todoRequest
     * @return
     */
    PageVO<TodoTaskVO> todoList(TodoRequest todoRequest);

    /**
     * 用户已办
     *
     * @param doneRequest
     * @return
     */
    PageVO<DoneTaskVO> doneList(DoneRequest doneRequest);

    /**
     * 通过或者拒绝
     *
     * @param dto
     * @return
     */
    String acceptOrReject(AcceptOrRejectDTO dto);

    /**
     * 获取指定用户组流程任务列表
     *
     * @param group
     * @return List<Task>
     */
    List<Task> tasks(String group);

    /**
     * 查看历史流程记录
     *
     * @param processInstanceId
     * @return List
     */
    List<HistoricActivityInstance> historicActivityInstances(String processInstanceId);

    /**
     * 驳回流程
     *
     * @param targetTaskKey
     * @param taskId
     * @return Task
     */
    String currentTask(String taskId, String targetTaskKey);


}
